//@version=5
strategy("MarketCipherB Strategy By Dennis", overlay=false, currency=currency.USD, initial_capital=100, commission_value=0.00, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// Get user input
version       = input.string("2.2.6", "Version")
useCurrentRes = input(true, "Use Current Chart Resolution?")
customRes     = input.timeframe("60", "Use Current Chart Resolution?")
obLevel1      = input(60, "Over Bought Level 1")
trigger1      = input(53, "Trigger 1")
osLevel1      = input(-62, "Over Sold Level 1")
trigger2      = input(-53, "Trigger 2")

// Functions
blueWaves_vwap(src, chlLen, avgLen) =>
    esa = ta.ema(src, chlLen)
    d = ta.ema(math.abs(src - esa), chlLen)
    ci = (src - esa) / (0.015 * d)
    bw1 = ta.ema(ci, avgLen)
    bw2 = ta.sma(bw1, 3)
    vwap = bw1 - bw2
    [bw1, bw2, vwap]
moneyFlow(period, mult, y) => ta.sma(((close - open) / (high - low)) * mult, period) - y

// Get components
cond(_offset) =>
    [bw1, bw2, vwap] = blueWaves_vwap(hlc3, 9, 12)
    moneyFlow = moneyFlow(60, 200, 2.25)
    rsiMod    = ta.sma(ta.stoch(close, high, low, 40), 2)
    stcRsiMod = ta.sma(ta.stoch(close, high, low, 81), 2)
    [bw1[_offset], bw2[_offset], vwap[_offset], moneyFlow[_offset], rsiMod[_offset], stcRsiMod[_offset]]
tf = useCurrentRes ? timeframe.period : customRes
[bw1, bw2, vwap, moneyFlow, rsiMod, stcRsiMod] = request.security(syminfo.tickerid, tf, cond(not useCurrentRes and barstate.isrealtime ? 1 : 0))

// Plots
plot(bw1, "Lt Blue Wave", #90caf9, 1, plot.style_area)
plot(bw2, "Blue Wave", color.new(#0d47a1, 20), 1, plot.style_area)
plot(vwap, "VWAP", color.new(#ffe500, 55), 2, plot.style_area)
plot(moneyFlow, "Money Flow", moneyFlow > 0 ? color.new(#4cd853, 20) : color.new(#c73d33, 20), 2, plot.style_area)
plotshape(ta.crossover(bw1, bw2) and bw1 < osLevel1, "Buy", shape.circle, location.bottom, color.new(#3fff00, 50), size=size.tiny)
plot(ta.crossover(bw1, bw2) ? bw2 : na, "Blue Wave Crossing UP", color.new(#00E676, 15), 3, plot.style_circles)
plot(ta.crossunder(bw1, bw2) ? bw2 : na, "Blue Wave Crossing Down", color.new(#FF5252, 15), 3, plot.style_circles)
plot(0, "Zero", color.white)
plot(100, "100%", color.new(color.white, 50), 1, plot.style_line)
plot(obLevel1, "OB 1 Solid", color.new(color.white, 50), 1, plot.style_line)
plot(osLevel1, "OS 1 Solid", color.new(color.white, 50), 1, plot.style_line)
plot(trigger1, "Trigger 1", color.new(color.white, 50), 1, plot.style_line)
plot(trigger2, "Trigger 2", color.new(color.white, 50), 1, plot.style_line)
plot(rsiMod, "RSI", #e600e6, 1)
plot(stcRsiMod, "Sto RSI", rsiMod > stcRsiMod ? #3fff00 : #ff0000, 1)
p0 = plot(-90, "Plot", color.new(color.white, 100))
p1 = plot(-103, "Plot", color.new(color.white, 100))
fill(p0, p1, moneyFlow > 0 ? color.new(#4cd853, 75) : color.new(#c73d33, 75))

// Entry and Exit conditions LONGS
longCondition = ta.crossover(bw1, bw2) and bw1 < osLevel1 or moneyFlow > 0 and vwap > 0 and ta.crossover(bw1, bw2) and bw1 < osLevel1
exitLong = ta.crossunder(bw1, bw2) and bw2 < osLevel1 or moneyFlow < 0 and vwap < 0 and ta.crossunder(bw1, bw2) and bw1 < obLevel1 and rsiMod > 80 and rsiMod < stcRsiMod 

// Entry and Exit for long
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
if (exitLong)
    strategy.close("My Long Entry Id", "Exit")
